package library

import (
	"fmt"

	"chat.com/pkg/cache"
)

func genOfflineSingleChatMsgKey(userId int64) string {
	return fmt.Sprintf("%s:%d", "offlineSingleChatMsg", userId)
}

func genOfflineGroupChatMsgKey(userId int64) string {
	return fmt.Sprintf("%s:%d", "offlineGroupChatMsg", userId)
}

// 存储单聊离线消息
func StoreOfflineSingleChatMsg(userId int64, msg string, sentTime float64) error {
	key := genOfflineSingleChatMsgKey(userId)
	err := cache.RdbTP.ZAdd(key, sentTime, msg)
	if err != nil {
		fmt.Println("adding offline msg but maybe lost")
		return err
	}

	return nil
}

// 获取某个用户的所有单聊离线消息，用户登录之后调用
func GetOfflineSingleChatMsg(userId int64) []any {
	key := genOfflineSingleChatMsgKey(userId)
	offlineMsgs, err := cache.RdbTP.ZRevRangeByScoreWithScores(key)
	if err != nil {
		return nil
	}

	msgs := []any{}
	for _, msg := range offlineMsgs {
		msgs = append(msgs, msg)
	}

	// 读完离线消息，删除离线消息
	cache.RdbTP.Del(key)
	return msgs
}

// 存储群聊离线消息
func StoreOfflineGroupChatMsg(userId int64, msg string, sentTime float64) error {
	key := genOfflineGroupChatMsgKey(userId)
	err := cache.RdbTP.ZAdd(key, sentTime, msg)
	if err != nil {
		fmt.Println("adding offline msg but maybe lost")
		return err
	}

	return nil
}

// 获取某个用户的所有群聊离线消息，用户登录之后调用
func GetOfflineGroupChatMsg(userId int64) []any {
	key := genOfflineGroupChatMsgKey(userId)
	offlineMsgs, err := cache.RdbTP.ZRevRangeByScoreWithScores(key)
	if err != nil {
		return nil
	}

	msgs := []any{}
	for _, msg := range offlineMsgs {
		msgs = append(msgs, msg)
	}

	// 读完离线消息，删除离线消息
	cache.RdbTP.Del(key)
	return msgs
}
